double myPowOp(double x, int n)
{
    double a[32] = {1, x};
    for(int i = 2; i < 32; ++i) {
        a[i] = a[i - 1] * a[i - 1];
    }
    int t = 0x00000001;
    double r = 1;
    for(int i = 0; i < 31; ++i) {
        if(t & n) {
            r *= a[i+1];
        }
        t <<= 1;
    }
    return r;
}

double myPow(double x, int n)
{
    if(n > 0) {
        return myPowOp(x, n);
    } else if(n == -2147483648) {
        return 1 / myPowOp(x, 2147483646);
    } else if(n < 0) {
        return 1 / myPowOp(x, -n);
    } else {
        return 1;
    }
}